package cn.wp.ewallet.wallet.dao.impl;

import cn.wp.common.core.dao.SqlString;
import cn.wp.common.core.model.WpPage;
import cn.wp.ewallet.wallet.dao.ReqOrderInfoDao;
import cn.wp.ewallet.wallet.extension.constant.EwalletWalletConstant;
import cn.wp.ewallet.wallet.model.entity.ReqOrderInfoDo;
import cn.wp.ewallet.wallet.model.entity.ReqOrderInfoDoo;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Repository;
import cn.wp.common.core.dao.JdbcSupportTemplate;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.ArrayList;
import java.util.List;

/**
 * 申请单-数据访问层实现
 * Created by zhangyongli on 2020/01/09
 */
@Repository
public class ReqOrderInfoDaoImpl implements ReqOrderInfoDao {

    @Autowired
    private JdbcSupportTemplate jdbcSupportTemplate;

    @Override
    public WpPage<ReqOrderInfoDoo> selectReqOrderByCondition(String status, WpPage page) {

        SqlString sqlString = SqlString.newInstance();
        sqlString.add("select t.*, p.oper_result, p.oper_user, p.oper_time, p.remark as oper_remark");
        sqlString.add("from (");
        sqlString.add("    select r.*, concat(p.mobile_prefix, '-', p.user_tel) as user_tel");
        sqlString.add("    from req_order_info r, user_wallet_rel u, pa_user_info p");
        sqlString.add("    where r.wallet_address = u.wallet_address");
        sqlString.add("        and u.user_id = p.user_id");
        sqlString.add(") t");
        sqlString.add("    left join proc_record_info p on t.req_order_id = p.req_order_id");

        if (StringUtils.isNotEmpty(status)) {
            sqlString.add("    where t.order_status = ?");
            sqlString.add("order by t.create_date desc");
            return jdbcSupportTemplate.selectList(sqlString.build(),new Object[]{status}, page, ReqOrderInfoDoo.class);
        }else{
            sqlString.add("order by t.create_date desc");
            return jdbcSupportTemplate.selectList(sqlString.build(),null, page, ReqOrderInfoDoo.class);
        }
    }

    /**
     * 新增申请单
     * @param reqOrderInfoDo
     */
    @Override
    public void insertReqOrderInfo(ReqOrderInfoDo reqOrderInfoDo) {
        jdbcSupportTemplate.insert(reqOrderInfoDo);
    }

    /**
     * 更新申请单的属性 (更新申请单的状态、 备注、)
     * @param reqOrderInfoDo
     */
    @Override
    public void updateReqOrderInfo(ReqOrderInfoDo reqOrderInfoDo) {
        SqlString sqlString=new SqlString();
        sqlString.add("UPDATE req_order_info SET ");
        sqlString.add("ORDER_STATUS = ? , REMARK = ? ");
        sqlString.add("WHERE REQ_ORDER_ID = ? ");
        Object[] objects=new Object[]{
                reqOrderInfoDo.getOrderStatus(),
                reqOrderInfoDo.getRemark(),
                reqOrderInfoDo.getReqOrderId(),
        };
        jdbcSupportTemplate.execute(sqlString.build(),objects);
    }

    /**
     * 通过 开始时间、结束时间、还有请求类型  查询申请单记录
     * @param startTime
     * @param endTime
     * @param reqType
     * @return
     */
    @Override
    public WpPage<ReqOrderInfoDoo> getReqOrderInfosByParams(String startTime, String endTime, String reqType, WpPage wpPage) {
        SqlString sqlString = new SqlString();


        sqlString.add("select t.*, p.oper_result, s.sys_user_code as oper_user, p.oper_time, p.remark as oper_remark, o.oper_result as trans_result");
        sqlString.add(" from (");
        sqlString.add("      select r.*, concat(p.mobile_prefix, '-', p.user_tel) as user_tel");
        sqlString.add("        from req_order_info r, user_wallet_rel u, pa_user_info p");
        sqlString.add("         where r.wallet_address = u.wallet_address");
        sqlString.add("           and u.user_id = p.user_id");
        sqlString.add("     ) t");
        sqlString.add("    left join proc_record_info p on t.req_order_id = p.req_order_id");
        sqlString.add("    left join trans_account_log o on t.req_order_id = o.req_order_id");
        sqlString.add("    left join system_user_info s on p.oper_user = s.sys_user_id");
        sqlString.add("    where 1=1 ");

        List<String> params = new ArrayList<>();
        if (StringUtils.isNotEmpty(startTime)) {
            sqlString.add("and   t.CREATE_DATE > ?");
            params.add(startTime);
        }
        if (StringUtils.isNotEmpty(endTime)) {
            sqlString.add("and t.CREATE_DATE < ?");
            params.add(endTime);
        }
        if (StringUtils.isNotEmpty(reqType)) {
            sqlString.add("and t.REQ_TYPE = ?");
            params.add(reqType);
        }
        sqlString.add("    ORDER BY t.CREATE_DATE desc");
        return jdbcSupportTemplate.selectList(sqlString.build(), params.toArray(), wpPage, ReqOrderInfoDoo.class);
    }

}